#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#define MAX_TEXT 512
#define MSG_KEY 1234

struct msgbuf {
    long mtype;
    char mtext[MAX_TEXT];
};

int main() {
    int msgid;
    struct msgbuf msg;

    // 创建消息队列
    msgid = msgget(MSG_KEY, 0666 | IPC_CREAT);
    if (msgid == -1) {
        perror("msgget failed");
        exit(EXIT_FAILURE);
    }

    printf("Enter messages to send (type 'exit' to quit):\n");
    while (1) {
        printf("> ");
        if (fgets(msg.mtext, MAX_TEXT, stdin) == NULL) {
            perror("fgets failed");
            break;
        }

        // 判断是否输入exit退出
        if (strncmp(msg.mtext, "exit", 4) == 0)
            break;

        msg.mtype = 1;

        if (msgsnd(msgid, &msg, strlen(msg.mtext) + 1, 0) == -1) {
            perror("msgsnd failed");
            break;
        }
    }

    // 不删除队列，让接收端继续用；需要时可手动删除
    return 0;
}
